#!/usr/bin/env bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH


#目录
#基础目录 nginx安装目录所在的目录(根据需要修改)
base_folder="/usr/local" 

#nginx安装目录(根据需要修改)
nginx_folder="${base_folder}/nginx_violet" && mkdir -p ${nginx_folder}

#数据存放目录(根据需要修改)
sync_folder="/usr/local/.nginx_dav_sync_data" &&  mkdir -p ${sync_folder}

#https相关文件存放目录
ssl_folder="${nginx_folder}/conf/ssl" &&  mkdir -p ${ssl_folder}

#git下载的仓库存放的目录
nginx_and_webdav_module_folder="${base_folder}/nginx_and_webdav_module" && mkdir -p ${nginx_and_webdav_module_folder}

#webdav配置相关目录
dav_config_folder="${nginx_folder}/conf/dav" && mkdir -p ${dav_config_folder}

#jq
jq_folder="${base_folder}/jq" && mkdir -p ${jq_folder}



#文件
#证书和私钥文件
nginx_cert="${ssl_folder}/nginx.crt"
nginx_key="${ssl_folder}/nginx.key"
#webdav登录用的密码文件
davpasswd_file="${dav_config_folder}/.davpasswd"
#webdav配置信息文件
webdav_config_file="${dav_config_folder}/webdav.json"
#DH 参数文件
dhparam_file="${ssl_folder}/dhparam.pem"
#会话凭证密钥文件
session_ticket_file="${ssl_folder}/session_ticket.key"
#用于nginx_webdav用的配置文件
nginx_webdav_conf="${nginx_folder}/conf/nginx_webdav.conf"
#nginx_webdav日志文件
nginx_webdav_log_file="${nginx_folder}/logs/webdav.access.log"
#jq解析器
jq_file="${jq_folder}/jq"

#参数
#仓库
nginx_webdav_download="https://gitee.com/photo-of-xiyin/nginx_and_webdav_module.git"
# Download Link of jq
jq_down_link="https://gitee.com/photo-of-xiyin/jq.git"

#默认登录用户名和密码
webdav_user="default"
webdav_pwd="default.passwd"
#默认随机密码长度
default_random_pwd_length=16


Info="${Green_font_prefix}[信息]${Font_color_suffix}"

Error="${Red_font_prefix}[错误]${Font_color_suffix}"

Tip="${Green_font_prefix}[注意]${Font_color_suffix}"

Green_font_prefix="\033[32m"

Red_font_prefix="\033[31m"

Font_color_suffix="\033[0m"

Green_background_prefix="\033[42;37m"

Red_background_prefix="\033[41;37m"

full_line="————————————————————————————————————————————"


#----------------------------------------随机字符串生成 BEGIN----------------------------------------

# Lowercase character
lowStr="abcdefghijklmnopqrstuvwxyz"

# upperStr character
upperStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ"

# special character
specialStr="~!@#$%()_+-[]"

# number
numStr="0123456789"

# 随机获取字符串字符
function getRandomChar() {
    local string=$1
    # echo 字符串：$string

    getStrLength $string
    local strLength=$?
    # echo 字符串长度：$strLength

    generateRand $strLength

    index=$(($random_number - 1))
    # echo "index=$index"
    randowm_char=${string:($index):1}
    # echo 随机的字符：$randowm_char
}

#----------------------------------------字符随机生成函数BEGIN----------------------------------------
# 随机获取字符串小写字符
function getRandLowChar() {
    getRandomChar $lowStr
    # echo -e "小写字符：$randowm_char"
}

#随机获取字符串大写字符
getRandUpperChar() {
    getRandomChar $upperStr
    # echo -e "大写字符：$randowm_char"
}

#随机获取数字字符
getRandNum() {
    getRandomChar $numStr
    # echo -e "数字：$randowm_char"
}

#随机获取特殊字符
getRandSpecialChar() {
    getRandomChar $specialStr
    # echo -e "特殊字符：$randowm_char"
}
#----------------------------------------字符随机生成函数END----------------------------------------

# 获取字符串长度
function getStrLength() {
    return $(expr length $1)
}

# 随机生成1~指定数这个范围的数字
generateRand() {
    randomRange 1 $1
}

# 生成指定范围的数字(min,max)
randomRange() {
    min=$1
    max=$(($2 - $min + 1))
    #时间戳（精确到纳秒）
    # num=$(date +%s%N)
    #系统随机值
    num=$RANDOM
    random_number=$(($num % $max + $min))
    # echo 随机数=$random_number

}

#遍历数组
foreach_arr() {
    # echo -e "数组遍历"
    for item in "${arr_str[@]}"; do
        echo "${item}"
    done

}

#随机调用其中一个字符随机生成函数
randomInvoke() {
    case "$1" in
    1)
        getRandLowChar
        ;;
    2)
        getRandUpperChar
        ;;
    3)
        getRandNum
        ;;
    *)
        getRandSpecialChar
        ;;
    esac

}

#打乱排序：循环随机位交换法
#原理：
# 循环遍历该数组，在每次遍历中产生一个0 ~ length - 1的数，该数代表本次循环要随机交换的位置。
# 将本次循环当前位置的数和随机位置的数进行交换
random_sort() {
    length=${#arr_str[*]}
    for ((i = 0; i < $length; i++)); do
        generateRand $length
        randomIndex=$(($random_number - 1))

        currentelementValue=${arr_str[i]}
        # echo "currentelementValue $currentelementValue"
        arr_str[i]=${arr_str[${randomIndex}]}
        arr_str[${randomIndex}]=${currentelementValue}
    done
}

#数组转字符串
arrayToString() {
    # echo -e "传来的参数：" $@
    new_arr=($@)
    randomPwd=''
    for i in ${new_arr[@]}; do
        randomPwd=$randomPwd$i
    done

}

#生成随机密码(指定密码长度)
getRandomPwd() {
    while true; do
        #判断密码长度
        if [ $1 -ge 8 ] && [ $1 -le 20 ]; then
            echo -e "你设置的密码长度为：$1"
            break
        else
            echo -e "密码长度需要在8~20位！" && exit
        fi
    done

    pwd_length=$1

    #定义空数组
    arr_str=()

    #先把 4 种字符每种来一个，并添加到数组中
    getRandLowChar
    # echo -e "数组长度：${#arr_str[*]}"

    arr_str[${#arr_str[*]}]=g

    getRandUpperChar
    arr_str[${#arr_str[*]}]=$randowm_char

    getRandNum
    arr_str[${#arr_str[*]}]=$randowm_char

    getRandSpecialChar
    arr_str[${#arr_str[*]}]=$randowm_char

    # echo -e "第1次打印数组"
    echo ${arr_str[*]}
    # echo -e "第1次遍历数组"
    foreach_arr

    # 因为已经把 4 种字符放进数组了，所以 i 取值从 4开始
    for ((i = 4; i < ${pwd_length}; i++)); do
        generateRand 4
        randomInvoke $random_number
        arr_str[${#arr_str[*]}]=$randowm_char
    done

    # echo -e "第2次打印数组"
    echo ${arr_str[@]}
    # echo -e "第2次遍历数组"
    foreach_arr

    #打乱排序
    random_sort
    # echo -e "打乱排序后：" && echo ${arr_str[*]}

    #将数组转字符串
    arrayToString ${arr_str[@]}

    echo -e "随机密码 $randomPwd"
}
#----------------------------------------随机字符串生成END----------------------------------------


#生成自签名证书
# function generate_self_cert(){
	
	# cd $nginx_and_webdav_module_folder && mv mkcert-v1.4.3-linux-amd64 mkcert && chmod +x mkcert
	# while true
	# do
		# echo -e "${Tip}"
		# echo -e "1.为指定域名生成自签名证书"
		# echo -e "2.为当前服务器公网IP生成自签名证书"
		# read -e -p "输入对应选项数字(默认是为公网IP生成自签名证书)：" ip_or_domain
		
		# if [[ -z ${ip_or_domain} ]] || [[ ${ip_or_domain} == "2" ]]; then
			# generate_self_cert_with_IP && break
		# elif [[ ${ip_or_domain} == "1" ]]; then
			# generate_self_cert_with_domain && break
		# else
			# echo -e "${Error}请输入正确数字！"
		# fi
	# done
	
# }


#生成自签名证书
function generate_self_cert(){
	cd $nginx_and_webdav_module_folder && mv mkcert-v1.4.3-linux-amd64 mkcert && chmod +x mkcert
	
	if [[ -z ${ip_or_domain} ]] || [[ ${ip_or_domain} == "2" ]]; then
		generate_self_cert_with_IP && break
	elif [[ ${ip_or_domain} == "1" ]]; then
		generate_self_cert_with_domain && break
	else
		echo -e "${Error} 系统异常！"
	fi
}


#在一开始就配置参数，后面全自动
function init_input_param(){
	#设置证书配置，选择ip还是域名方式
	while true
	do
		echo -e "${Tip}"
		echo -e "1.为指定域名生成 自签名证书"
		echo -e "2.为当前服务器公网IP生成 自签名证书"
		read -e -p "输入对应选项数字(默认是为公网IP生成自签名证书)：" ip_or_domain
		
		if [[ -z ${ip_or_domain} ]]; then
			break
		fi
		if [[ ${ip_or_domain} -ne "1" ]] && [[ ${ip_or_domain} -ne "2" ]]; then
			echo -e "${Error}请输入正确数字！"
		else 
			break
		fi
		
	done
}

function generate_self_cert_with_domain (){
	echo -e "${Info} ${full_line} 生成自签名证书 start...${full_line}" && echo
	
	while true
	do
		read -e -p "输入你的域名：" CommonName
		echo -e "是否确定你的域名(选择否可重输你的域名)? [y/n]" && echo
		read -e -p "(默认: n):" unyn
		[[ -z ${unyn} ]] && unyn="n"
		if [[ ${unyn} == [Yy] ]]; then
			break
		else
			echo && echo -e "再次输入你的域名" && echo
		fi
		
	done
	
	#生成自签名证书
	./mkcert -key-file ${nginx_key} -cert-file ${nginx_cert} -client  ${CommonName}
	
	echo -e "${Info} ${full_line} 生成自签名证书 END ${full_line}" && echo
}

function generate_self_cert_with_IP(){
	echo -e "${Info} ${full_line} 生成自签名证书 start...${full_line}" && echo
	while true
	#公网IP
	CommonName=`wget -qO- -t1 -T2 ipinfo.io/ip`
	do
		if [[ -z ${CommonName} ]]; then
			echo "${Green_font_prefix}${Tip}：获取服务器公网IP失败，请手动输入IP：{Font_color_suffix}" CommonName
		else
			break
		fi
	done
	#生成自签名证书
	./mkcert -key-file ${nginx_key} -cert-file ${nginx_cert} -client  ${CommonName}
	echo -e "${Info} ${full_line} 生成自签名证书 END ${full_line}" && echo
}

# 获取根证书存放路径
function Get_CAROOT(){
	cd $nginx_and_webdav_module_folder
	#根证书文件rootCA.pem
	CAROOT=$(./mkcert -CAROOT)/rootCA.pem
}

# 安装nginx、dav模块、dav扩展模块等等
function install_nginx_and_webdavModule(){
	echo -e "${Info} ${full_line} 安装nginx、dav模块、dav扩展模块等等 start... ${full_line}" && echo
	#创建用于运行Nginx的用户（创建账号nginx，该用户无法登陆系统且没有家目录）
	useradd -M -s /sbin/nologin nginx

	#安装所需依赖包
	yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel libxslt-devel libxml2 libxml2-dev

	#查看依赖是否安装成功
	rpm      -qa   make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel libxslt-devel libxml2 libxml2-dev


	#解压下载的资源
	cd ${nginx_folder}
	
	tar -zxvf  ${nginx_and_webdav_module_folder}/nginx-1.18.0.tar.gz
	tar -zxvf  ${nginx_and_webdav_module_folder}/nginx-dav-ext-module-3.0.0.tar.gz
	tar -zxvf  ${nginx_and_webdav_module_folder}/headers-more-nginx-module-0.33.tar.gz
	cd nginx-1.18.0/


	#编译
	# 指定nginx程序运行用户、用户组及安装目录、ssl
	./configure \
	--user=nginx --group=nginx --prefix=${nginx_folder} --with-http_ssl_module \
	--with-ipv6 --with-http_v2_module --with-http_dav_module \
	--add-module=${nginx_folder}/nginx-dav-ext-module-3.0.0 \
	--add-module=${nginx_folder}/headers-more-nginx-module-0.33
	#编译安装,make -j 4 会启用多个作业同时进行，比默认的make更快
	make -j 4 && make install

	#添加软链接（不用使用nginx可执行文件的全路径），方便环境变量调用
	ln -s ${nginx_folder}/sbin/nginx   /usr/local/sbin/
	echo -e "${Info} ${full_line} 安装nginx、dav模块、dav扩展模块等等 END ${full_line}" && echo
}

function download_resources(){
	echo -e "${Info} ${full_line} 资源下载 start...${full_line}" && echo
	#下载nginx及其webdav扩展模块
	cd $base_folder
	yum install git -y
	git clone ${nginx_webdav_download}
	#下载jq
	install_jq
	echo -e "${Info} ${full_line} 资源下载 END ${full_line}" && echo
}

#配置nginx配置文件
function set_nginx_config_file(){
echo -e "${Info} ${full_line} 配置nginx配置文件 start...${full_line}" && echo
#备份nginx配置文件
cd ${nginx_folder}/conf
mv nginx.conf nginx.conf.bak


#注意此块内容除了EOF所在行，其余不要用Tab符，如果有，请替换为空格，否则重定向无法正确输出
cat >${nginx_webdav_conf} <<-EOF
user nginx nginx; #用户及用户组
#user  nobody;
worker_processes  1;



events {
   worker_connections  1024;
}


http {
   # 定义的日志格式 
   log_format  main  '\$remote_addr - \$remote_user [\$time_local] "\$request" '
        '\$status \$body_bytes_sent "\$http_referer" '
        '"\$http_user_agent" "\$http_x_forwarded_for"';
   
   #DAV文件锁内存共享区
   dav_ext_lock_zone zone=davlock:10m;
   
   #隐藏nginx版本号，避免被坏人利用
   server_tokens off;
   
   
   include       mime.types;
   default_type  application/octet-stream;
   
   sendfile        on;
   
   keepalive_timeout  65;
   
   #gzip  on;
   
   
   server {
      listen       80;
      server_name  localhost;
      rewrite ^(.*)\$  https://\$host\$1? permanent;    # 强制HTTP访问跳转为HTTPS访问
      #charset koi8-r;
      
      #access_log  logs/host.access.log  main;
      
      location / {
         root   html;
         index  index.html index.htm;
      }
      
      #error_page  404              /404.html;
      
      #
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
        root   html;
      }
 }

 # HTTPS server
 server {
  # 开启https和http2.0提升传输性能
  listen       443 ssl http2;  
  server_name  localhost;
  
  # 日志文件路径及日志格式类型
  access_log  ${nginx_webdav_log_file}  main;
  # 网站证书文件
  ssl_certificate  ssl/nginx.crt;
  # 网站证书密钥文件
  ssl_certificate_key  ssl/nginx.key;
  # 网站证书密钥密码文件
  # ssl_password_file ssl/xxx;
  
  #ssl_verify_client on;  # 启用客户端证书认证
  # 客户端证书信任链的CA中间证书或根证书
  #ssl_client_certificate /root/.local/share/mkcert/rootCA.pem; 
  
  
  ssl_dhparam  ssl/dhparam.pem; # DH参数文件
  ssl_ecdh_curve auto; # ECDH椭圆曲线算法为prime256v1
  
  #指定会话凭证密钥文件，用于在多台 Nginx 间实现会话凭证共享
  #否则 Nginx 会随机生成一个会话凭证密钥
  ssl_session_ticket_key  ssl/session_ticket.key;
  ssl_session_tickets on;  # 以会话凭证机制实现会话缓存
  
  # 会话缓存存储大小为10MB
  ssl_session_cache shared:SSL:10m;
  # 会话缓存超时时间为20分钟
  ssl_session_timeout  20m;    
  
  # 最大允许上传的文件大小
  client_max_body_size 20G;
  
  #设置使用的 SSL 协议
  ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
  #设置 HTTPS 建立连接时用于协商使用的加密算法组合，也称密码套件
  #指令值内容为 openssl 的密码套件名称，多个套件名称间用“:”分隔
  ssl_ciphers  EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  #是否启用在 SSLv3 和 TLSv1 协议的 HTTPS 连接时优先使用服务端设置的密码套件
  # ssl_prefer_server_ciphers on;
 
 
 # 启用HSTS
  add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

  add_header X-Frame-Options DENY;               # 禁止被嵌入框架
  add_header X-XSS-Protection "1; mode=block";   # XSS跨站防护
  add_header X-Content-Type-Options nosniff;     # 防止在浏览器中的MIME类型混淆攻击

  location / {
   root html;
   index index.html;
  }

  location /dav {
   # 数据存放目录
   alias ${sync_folder};
   index index.html index.htm;
   # 开启文件索引列表(看情况选择是否开启)
   autoindex on;
   #关闭情况下显示的文件时间为GMT时间，开启显示的是服务器中的时间
   autoindex_localtime on; 
    
   set \$dest \$http_destination;
    
   # 对目录请求、对URI自动添加"/"
   if (-d \$request_filename) {                   
    rewrite ^(.*[^/])\$ \$1/;
    set \$dest \$dest/;
   }
   #对MOVE|COPY方法强制添加Destination请求头
   if (\$request_method ~ (MOVE|COPY)) {
    more_set_input_headers 'Destination: \$dest';
   }


   if (\$request_method ~ MKCOL) {
    rewrite ^(.*[^/])\$ \$1/ break;
   }
   
   #webdav 配置
   client_body_temp_path /tmp;
   dav_methods PUT DELETE MKCOL COPY MOVE;  # DAV支持的请求方法
   dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK; # DAV扩展支持的请求方法
   dav_ext_lock zone=davlock;     # DAV扩展锁绑定的内存区域
   create_full_put_path  on;      # 启用创建目录支持
   dav_access user:rw group:rw all:r;   #设置创建的文件及目录的访问权限
  
   #auth_basic "Authorized Users WebDAV";
   auth_basic "user login";
   auth_basic_user_file  dav/.davpasswd; #身份鉴权文件
        }
    }
}
	EOF
echo -e "${Info} ${full_line} 配置nginx配置文件 END ${full_line}" && echo
}

#设置同步目录属性
function set_sync_folder(){
		
	# 所属用户和用户组
	# 设置文件所有者 如果是所有人都可以使用的话设置  nobody:nobody
	chown nginx:nginx  $sync_folder
	#权限设置
	chmod -R 700 $sync_folder
}


#生成用于登录的密码文件
function generate_davpasswd_file(){
	yum -y install openssl
	echo "${webdav_user}:$(openssl passwd  ${webdav_pwd})" >${davpasswd_file}
	
	#密码文件权限配置
	chown nginx:nginx   ${davpasswd_file}
	chmod 600           ${davpasswd_file}
	
	echo -e "WebDAV用户名：${webdav_user}"
	echo -e "WebDAV密码：${webdav_pwd}"
}

#增强https安全性
function enhance_https_security(){
	echo -e "${Info} ${full_line} 增强https安全性 start...${full_line}" && echo
	#HTTPS 密钥交换算法
	#生成 DH 参数文件
	yum -y install openssl
	openssl dhparam -out ${dhparam_file} 2048

	#HTTPS 会话缓存
	##加快 HTTPS 建立连接的速度，提升性能
	#生成会话凭证密钥文件
	openssl rand 80 >${session_ticket_file}
	echo -e "${Info} ${full_line} 增强https安全性 END ${full_line}" && echo
}

#正常安装nginx和webdav模块，并启动nginx
function install_ningx_and_start_webdav(){
	#配置执行过程中终端所需要输入的参数
	init_input_param
	
	download_resources
	install_nginx_and_webdavModule && enhance_https_security
	generate_self_cert
	
	set_sync_folder
	
	read -e -p "设置WebDAV的用户名：" webdav_user
	read -e -p "设置WebDAV的密码：" webdav_pwd
	#生成登录用的密码文件
	generate_davpasswd_file
	
	#写入WebDAV配置信息
	write_webdav_config
	
	#配置nginx的主配置文件
	set_nginx_config_file
	
	#启动nginx
	start_nginx
	
	#关闭防火墙
	systemctl stop firewalld.service
	
	#读取WebDAV配置信息
	view_webdav_cofig
	
	#下载根证书
	cd /root/.local/share/mkcert
	yum -y install lrzsz
	sz rootCA.pem
}

#默认安装，全自动
function default_install_webdav_nginx(){
	#配置执行过程中终端所需要输入的参数
	init_input_param
	
	download_resources
	install_nginx_and_webdavModule && enhance_https_security
	generate_self_cert
	
	set_sync_folder
	#随机用户名
	webdav_user=$(openssl rand -hex 3)
	#默认长度的随机密码
	getRandomPwd ${default_random_pwd_length}
	webdav_pwd=$randomPwd
	#生成登录用的密码文件
	generate_davpasswd_file
	
	#写入WebDAV配置信息
	write_webdav_config
	
	#配置nginx的主配置文件
	set_nginx_config_file
	
	#启动nginx
	start_nginx
	
	#关闭防火墙
	systemctl stop firewalld.service
	
	#读取WebDAV配置信息
	view_webdav_cofig

	#下载根证书
	cd /root/.local/share/mkcert
	yum -y install lrzsz
	sz rootCA.pem
}

#写入WebDAV配置信息
function write_webdav_config(){
echo -e "${Info} ${full_line}写入WebDAV配置信息 start... ${full_line}" && echo

	cat >${webdav_config_file} <<-EOF
{
"CommonName": "${CommonName}",
"webdav_user": "${webdav_user}",
"webdav_pwd": "${webdav_pwd}",
"other": "other"
}
	EOF
	[[ ! -e $webdav_config_file ]] && echo -e "${Error}：配置信息写入失败" && break
	echo -e "${Info} ${full_line}写入WebDAV配置信息 END ${full_line}" && echo
}

#get linux type
get_linux_type() {
	if [[ -f /etc/redhat-release ]]; then
		release="centos"

	elif cat /etc/issue | grep -q -E -i "debian"; then
		release="debian"
	elif cat /etc/issue | grep -q -E -i "ubuntu"; then
		release="ubuntu"
	elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
		release="centos"
	elif cat /proc/version | grep -q -E -i "debian"; then
		release="debian"
	elif cat /proc/version | grep -q -E -i "ubuntu"; then
		release="ubuntu"
	elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
		release="centos"
	fi

	bit=$(uname -m)
	echo -e " ${Green_background_prefix}当前Linux版本:${release}${Font_color_suffix}"
	echo -e " ${Green_background_prefix}系统类型：${bit}${Font_color_suffix}"
}

#install jq
function install_jq() {
    get_linux_type
    
	yum install git -y
	cd $base_folder
	git clone ${jq_down_link}

	
	if [[ ${bit} = "x86_64" ]]; then
		mv $jq_folder/jq-linux64 ${jq_file}
	else
		mv $jq_folder/jq-linux32 ${jq_file}
	fi

	chmod +x ${jq_file}
	[[ ! -e ${jq_file} ]] && echo -e "${Error} ${Red_font_prefix}JQ解析器$({jq_file}) 剪切失败，请检查 ! ${Font_color_suffix}" && exit 1
	[[ -e ${jq_file} ]] && echo -e "${Info}${Green_font_prefix}JQ解析器剪切成功！${Font_color_suffix}"

}


#显示WebDAV配置信息
function view_webdav_cofig() {
	get_webdav_config

	#ouput config info
	echo && echo "==================================================="
	echo -e " WebDAV配置信息：" && echo
	echo -e " WebDAV URL\t    : ${Green_font_prefix}https://${CommonName_from_jq}/dav${Font_color_suffix}"
	echo -e " WebDAV用户名\t    : ${Green_font_prefix}${webdav_user_from_jq}${Font_color_suffix}"
	echo -e " WebDAV密码\t    : ${Green_font_prefix}${webdav_pwd_from_jq}${Font_color_suffix}" && echo

	echo && echo "==================================================="

}

#读取WebDAV配置信息
function get_webdav_config(){
	echo -e "${Info} ${full_line}读取WebDAV配置信息中...${full_line}" && echo
	
	if [[ ! -e ${jq_file} ]]; then
		install_jq
	fi

	#get config info
	CommonName_from_jq=$(${jq_file} '.CommonName' ${webdav_config_file} | sed 's/^.//;s/.$//')
	webdav_user_from_jq=$(${jq_file} '.webdav_user' ${webdav_config_file} | sed 's/^.//;s/.$//')
	webdav_pwd_from_jq=$(${jq_file} '.webdav_pwd' ${webdav_config_file} | sed 's/^.//;s/.$//')
	
	
}

#----------------------------------nginx进程管理BEGIN----------------------------------
function start_nginx(){
	echo -e "${Info} ${full_line} nginx 开启中...${full_line}" && echo
	${nginx_folder}/sbin/nginx -c ${nginx_webdav_conf}
}

function stop_nginx(){
	echo -e "${Info} ${full_line} nginx 关闭中... ${full_line}" && echo
	#方式1
	#${nginx_folder}/sbin/nginx -s stop
	#方式2
	#kill -9 $(ps -ef|grep -v grep |grep nginx |awk  '{print $2}')
	#方式3
	#xargs加-i 参数直接用 {}就能代替管道之前的标准输出的内容，这里指的是进程号
	ps -ef |grep -v grep |grep nginx |awk  '{print $2}' |xargs -i kill -9 {}
	nginx_status
	if [[ -z ${nginx_pids} ]]; then
		echo -e "${Tip}${Info_font_prefix}[信息]${Font_suffix}  关闭成功 "
	else
		kill -9 ${nginx_pids}
		#${nginx_folder}/sbin/nginx -s stop

		if [[ $? -eq 0 ]]; then
			echo -e "${Tip}${Info_font_prefix}[信息]${Font_suffix}  关闭成功 !"
		else
			echo -e "${Error_font_prefix}[错误]${Font_suffix} 关闭失败 !"
		fi
	fi
}

function restart_nginx(){
	echo -e "${Info} ${full_line} nginx 重启中... ${full_line}" && echo
	stop_nginx && start_nginx
}

function nginx_status(){
	#nginx进程号，进场号可能有多个
	nginx_pids=$(ps -ef | grep -v "grep" | grep "nginx" | awk '{print $2}')
	echo "nginx进程号：${nginx_pids}"
}

#----------------------------------nginx进程管理 END----------------------------------

function check_firewall_status() {
	if [[ ! -z $(systemctl status firewalld | grep dead) ]]; then
		echo -e " 防火墙状态：${Green_font_prefix}已关闭${Font_color_suffix}"
	elif [[ ! -z $(systemctl status firewalld | grep running) ]]; then
		echo -e " 防火墙状态：${Red_font_prefix}开启（建议关闭）${Font_color_suffix}"
	fi
}


function uninstall_nginx_and_webdav(){
	echo "确定要 卸载nginx及其webdav？[y/n]" && echo
	read -e -p "(默认: n):" uninstall_unyn
	[[ -z ${uninstall_unyn} ]] && uninstall_unyn="n"
	if [[ ${uninstall_unyn} == [Yy] ]]; then
		#关闭nginx
		stop_nginx

		#删除nginx安装目录
		rm -rf ${nginx_folder}
		#删除根证书文件和下载的仓库
		rm -rf /root/.local/share/mkcert/* && rm -rf ${nginx_and_webdav_module_folder}
		#删除jq解析器
		rm -rf ${jq_folder}
		#删除链接文件
		rm -rf /usr/local/sbin/nginx
		
		echo && echo "卸载webdav-cli完成！" && echo
		
	else
		echo && echo " 已取消卸载..." && echo
	fi
}

function my_start() {
	echo -e "一键管理脚本 ${Green_background_prefix}[v1.0]${Font_color_suffix}
  ${Green_font_prefix}1.${Font_color_suffix} 安装webdav-nginx并启动
  ${Green_font_prefix}2.${Font_color_suffix} 卸载webdav-nginx 
  ${Green_font_prefix}3.${Font_color_suffix} 关闭webdav-nginx 
  ${Green_font_prefix}4.${Font_color_suffix} 开启webdav-nginx 
  ${Green_font_prefix}5.${Font_color_suffix} 重启webdav-nginx 
  
————————————————————————————————————————————————————————————————
  ${Green_font_prefix}6.${Font_color_suffix} 修改配置信息
  ${Green_font_prefix}7.${Font_color_suffix} 查看webdav-nginx配置信息
  ${Green_font_prefix}8.${Font_color_suffix} 查看webdav-nginx日志
  

  "
	# check_wedav_cli_status
	check_firewall_status
	echo && read -e -p "请输入数字 [1-8]：" num
	case "${num}" in
	1)
		install_ningx_and_start_webdav
		;;
	2)
		uninstall_nginx_and_webdav
		;;
	3)
		stop_nginx
		;;
	4)
		start_nginx
		;;
	5)
		restart_nginx
		;;
	6)
		modify_webdav_config
		;;
	7)
		view_webdav_cofig
		;;
	8)
		# view log
		tail -f $nginx_webdav_log_file
		;;
	*)
		clear
		echo -e "${Red_font_prefix}${Error} 请输入正确的数字 [1-8]${Font_color_suffix}"
		;;
	esac
}

# 默认安装用于webdav的nginx，并启动nginx。全自动
if [[ $1 -eq 1 ]]; then
	default_install_webdav_nginx && exit
fi

my_start


